6c9fc7dac6c150b27989c5f4044ebd1df7c6e83e,h2o-core/src/main/java/water/rapids/ASTStrOp.java,ASTToLower,apply,#Env#Env.StackHelp#AST#,147

Before Change


  @Override public String str() { return "tolower"; }
  @Override Val apply( Env env, Env.StackHelp stk, AST asts[] ) {
    Frame fr = stk.track(asts[1].exec(env)).getFrame();
    if (fr.numCols() != 1)
      throw new IllegalArgumentException("tolower() only takes a single column of data. " +
                                         "Got " + fr.numCols() + " columns.");
    Frame res = null;
    Vec vec = fr.anyVec();  assert vec != null;
    if (vec.isString()) res = toLowerStringCol(vec);
    else throw new IllegalArgumentException("tolower() requires a string column. "
        + "Received " + fr.anyVec().get_type_str() + ". Please convert column to strings first.");
    assert res != null;
    return new ValFrame(res);
  }
  private Frame toLowerStringCol(Vec vec) {

After Change


  @Override int nargs() { return 1+1; } //(tolower x)
  @Override public String str() { return "tolower"; }
  @Override Val apply( Env env, Env.StackHelp stk, AST asts[] ) {
    Frame fr = stk.track(asts[1].exec(env)).getFrame();
    // Type check
    for (Vec v : fr.vecs())
      if (!(v.isCategorical() || v.isString()))
        throw new IllegalArgumentException("tolower() requires a string or categorical column. "
            +"Received "+fr.anyVec().get_type_str()
            +". Please convert column to a string or categorical first.");

    // Transform each vec
    Vec nvs[] = new Vec[fr.numCols()];
    int i = 0;
    for(Vec v: fr.vecs()) {
      if (v.isCategorical())
        nvs[i] = toLowerCategoricalCol(v);
      else
        nvs[i] = toLowerStringCol(v);
      i++;
    }

    return new ValFrame(new Frame(nvs));
  }

  private Vec toLowerCategoricalCol(Vec vec) {